电视剧剧本生成 - Generate TV Scripts

所需文档和需要通过的测试

Criteria Meet Specification

提交所有需要的项目文件

该项目提交应包含项目中名为 dlnd_tv_script_generation.ipynb.ipynb文件。

项目中所有的单元测试都已通过

项目中所有的单元测试都已通过

预处理

Criteria Meet Specification

create_lookup_tables 函数是否正确地创建了查找字典(lookup dictionaries)?

create_lookup_tables 函数的功能是创建两个字典:

  • 名为 vocab_to_int 的字典,键值是 words,值是 id。
  • 名为 int_to_vocab 的字典,键值是 id,值是 words。

该函数的返回值是形如 (vocab_to_int, int_to_vocab) 的元组。

项目中否正确创建了一个(用于标记标点符号的)令牌字典?

token_lookup 函数返回一个字典,能将标点符号转换为另一令牌。

处理数据

Criteria Meet Specification

分批处理数据

batch_data函数把单词拆分到合适的长度, breaks up word id's into the appropriate sequence lengths, such that only complete sequence lengths are constructed.

使用 TensorDataset 构建数据

batch_data函数中的数据被正确的转换成了张量,并被格式化成了TensorDataset

数据被正确处理

最终batch_data为处理好的数据返回了一个 DataLoader。

创建神经网络

Criteria Meet Specification

定义了 RNN 类

The RNN class has complete init, forward , and init_hidden functions.
RNN 类应该包含 __init__, forward , and init_hidden 函数。

项目中是否正确创建了 RNN 层并对其进行了初始化?

get_init_cell 函数应实现如下功能:

  • MultiRNNCell 中使堆叠一层或多层 BasicLSTMCells,用 rnn_size 参数来控制层数。
  • 使用 MultiRNNCell 中的 zero_state 函数来初始化每个 cell。
  • 将初始状态命名为 "initial_state"
  • get_init_cell 函数返回该 cell 并对该元组 (Cell, InitialState) 中的内容进行初始化。

RNN 包含至少一个 LSTM(或者 GRU)和全连接层。

RNN 必须在一个全连接层包含一个 LSTM 或者 GRU。LSTM/GRU 应该被正确的初始化。

项目是否正确建立了神经网络?

build_nn 函数应按顺序实现如下功能:

  • 使用 get_embed 函数对 input_data 进行词嵌入。
  • 使用 build_rnn 函数创建一个 RNN。
  • 使用具有线性激活函数、以 vocab_size 作为输出个数的全连接层。
  • 以形如 (Logits, FinalState) 的元组返回最终计算得的 logits 及终态。

项目是否正确使用 RNN Cell 创建了 RNN?

build_rnn 函数应实现如下功能:

  • 使用 tf.nn.dynamic_rnn 创建 RNN。
  • 将终态命名为 "final_state"。
  • 以形如 (Outputs, FinalState) 的格式返回输出及终态。

训练神经网络

Criteria Meet Specification

项目中神经网络是否使用了合理的超参数?

  • 具有足够多的 epoch 使得神经网络的训练 loss 接近或达到最小。epoch 不设上限,仅需要能使得训练 loss 较小,同时当给出更多训练次数时,神经网络的结果并不会有太大的改善。
  • 具有适当的 batch size,它要足够大使得神经网络能够高效地训练,同时也不能过大否则内存会不够。此处并没有所谓“最好的”值,它往往受你 GPU 显存的影响。
  • 如果你选择使用词嵌入,嵌入维数应该显著的小于词库的大小。
  • RNN 层的大小(即隐层中节点的数量)足够大,使之能够很好的拟合数据。同样地,此处也没有标准的最优值。
  • 一个 GRU/LSTM 中的层数应该在 1-3 之间。
  • 序列长度(seq_length)应大约是你希望生成句子的长度。它应当与给出数据的结构相匹配。
  • 学习率不能太大,如果太大的话那么训练算法将不会收敛。不过也要是适当的值,确保算法不会无限制地训练。

模型在训练过程中有提升

输出的损失应该持续下降,且应当小于 3.5。

回答了关于超参数的选择

回答应该包含了选择模型大小,序列长度,以及其它参数的原因。

生成电视剧剧本

Criteria Meet Specification

项目中是否导入了正确的张量?

get_tensor_by_name 函数按顺序返回如下张量,并将其存在一个元组中返回:"input:0", "initial_state:0", "final_state:0", 及 "probs:0"。

项目是否合理地预测了词汇?

pick_word 函数合理地预测了下一词汇。

项目是否成功生成了一个电视剧剧本?

生成的电视剧剧本可能长度上会有很大的差异,但是它在数据集中看起来像是一个结构化的电视剧本。

不过它们并不需要合乎逻辑、或是没有语法错误。